import axios from 'axios';
import config from '../config'
import storage from './storage';
// 定义常量
const TOKEN_ERROR = "认证失败或token过期"
const NETWORK_ERROR = "请求超时，请检查网络设置"
const serive = axios.create({
    baseURL: config.baseUrl,
    timeout: 8000
});

// const post = (url, data) => {
//     return new Promise((resolve, reject) => {
//         serive.post(url, data, {
//                 headers: {
//                     'Content-Type': 'application/json',
//                     'Authorization': sessionStorage.getItem('token') || ''
//                 }
//             })
//             .then(res => {
//                 resolve(res.data);
//             })
//             .catch(err => {
//                 reject(err);
//             });
//     });
// };
// export { post }
// 封装各类请求
function request(options) {
    //options是将来使用过程中传递的具体配置
    // 如果是post
    options.method = options.method || 'get'
    if (options.method === 'get') {
        options.params = options.data
    }
    return serive(options)
}
const requestList = ['get', 'post']
requestList.forEach(item => {
    request[item] = () => {
        return request({
            url,
            data,
            method: item,
            ...options
        })
    }
})

export default request;






//get post
// 重要躬耕：拦截器 interceptor
// 拦截器的作用：把请求和响应拆分更加细致，为了给程序员添加操作的机会
// 使用场景：在请求拦截的过程中添加token
// 在响应拦截的过程中统一拦截错误处理
// 怎样操作：
// 添加一个请求拦截器
serive.interceptors.request.use((config) => {
    //config请求配置
    // 注意一定要返回，才会有正常进行config.headers
    let headers = config.headers
    console.log(storage.getItem("userInfo"))
    const { token } = storage.getItem("userInfo") || ''
        // 判断你这个请求头有没有，没有就添加
    if (!headers.Authorization) {
        headers.Authorization = "Bearer " + token;
    }
    return config
})

//添加一个响应拦截器
serive.interceptors.response.use((res) => {
    //res请求响应内容
    //响应拦截处理
    const { code, data, msg } = res.data
    if (code == 200) {
        //如果code成功，直接返回数据到客户端即可
        return data
    } else if (code === 40001) {
        console.log('TOKEN_ERROR');
        // 返回一个外面可以捕获错误的的对象
        // 所以要返回一个promise的错误对象
        return Promise.reject('TOKEN_ERROR')
    } else {
        //如果进入该分支，说明没有code
        //请求超过我们的timeout
        console.log('NETWORK_ERROR');
        return Promise.reject('NETWORK_ERROR')
    }
})